当前位置:运维
作者:陈沙克
原文连接:http://www.chenshake.com/dib-and-virt-customize-a-custom-mirror-image/
这两个工具,都可以对镜像进行定制,有什么区别呢?DIB功能比较强大,灵活,模块化,通过一个一个Element,来实现镜像的定制。Virt-customize,可以让你不需要写代码,搞定基本你想要的定制。
调整镜像的大小,对于DIB来说,就一个参数,对于Virt来说,还是比较折腾的。下面的操作,写成一个脚本。应该都不难了。把镜像的名字改成变量。基本就没问题的。
这次还是基于CentOS官方镜像,进行整个过程的记录。
设置Repo
cd /etc/yum.repos.d/
mkdir backup
mv *.repo ./backup
curl -O http://mirrors.aliyun.com/repo/Centos-7.repo
curl -O http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum list
下载镜像
mkdir cloud-images
cd cloud-images
curl -O https://mirrors.ustc.edu.cn/centos-cloud/centos/7/images/CentOS-7-x86_64-GenericCloud-2003.qcow2
安装DIB和Virt套件
yum install centos-release-openstack-train
yum install diskimage-builder
yum install libguestfs-tools-c
使用libguestfs前,需要运行
export LIBGUESTFS_BACKEND=direct
确认镜像下载的CentOS版本,这点其实挺重要。
virt-inspector -a CentOS-7-x86_64-GenericCloud-1905.qcow2 > c.txt
输出的内容很多,重定向到文本,打开文本,你就基本可以看到下面的信息。你就可以确定你的镜像的版本。
<?xml version="1.0"?>
<operatingsystems>
<operatingsystem>
<root>/dev/sda1</root>
<name>linux</name>
<arch>x86_64</arch>
<distro>centos</distro>
<product_name>CentOS Linux release 7.6.1810 (Core) </product_name>
<major_version>7</major_version>
<minor_version>6</minor_version>
<package_format>rpm</package_format>
<package_management>yum</package_management>
<hostname>localhost.localdomain</hostname>
<osinfo>centos7.0</osinfo>
<mountpoints>
<mountpoint dev="/dev/sda1">/</mountpoint>
</mountpoints>
<filesystems>
<filesystem dev="/dev/sda1">
<type>xfs</type>
<uuid>60d67439-baf0-4c8b-94a3-3f10a362e8fe</uuid>
</filesystem>
先用DIB,对镜像做一下标准对动作。
设置环境
export DIB_LOCAL_IMAGE="/root/cloud-images/CentOS-7-x86_64-GenericCloud-2003.qcow2"
export DIB_DISTRIBUTION_MIRROR="https://mirrors.ustc.edu.cn/centos"
export DIB_RELEASE=7
export DIB_CLOUD_INIT_ALLOW_SSH_PWAUTH="yes"
有一点你需要注意的,不管你下载的是那个CetnOS 7的镜像,DIB都会将他升级到最新的版本的CentOS,当前是CentOS 7.9。
如果你就只需要一个固定版本的镜像,那么你下载这个版本的镜像回来。加上下面的参数。另外镜像里面的base repo,你也是需要小心处理。需要在repo里指定版本,这样才能避免yum update 或 yum upgrade 升级系统。
export DIB_AVOID_PACKAGES_UPDATE=1
这样就可以开始构建镜像
DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack"
disk-image-create -a amd64 -o CentOS_Linux_release_7.8.2003.qcow2 -x --image-size 40 vm base centos disable-selinux cloud-init cloud-init-datasources dhcp-all-interfaces growroot
如果不是OpenStack平台的虚拟机使用,那么这个地方需要注意,例如zstack平台,要注意差异,growroot,这个功能,Zstack平台是不用的。growroot,是创建的时候,调整根分区的大小,Flavor,定义的磁盘大小。
DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, Ec2"
disk-image-create -a amd64 -o CentOS_Linux_release_7.8.2003.qcow2 -x --image-size 40 vm base centos disable-selinux cloud-init cloud-init-datasources dhcp-all-interfaces
都启用EC2和OpenStack,会导致虚拟机启动速度慢。
好好看看这篇文章:https://mp.weixin.qq.com/s/hDe7djVI0ZufkrApoMpWjw
默认虚拟机是才有bios启动,如果你希望改成UEFI启动,那么你可以加入下面参数就可以。
block-device-efi
应该很快,20分钟,就可以完成第一个镜像的构建。后续再做修改,时间就会短很多。把镜像的大小调整成40G。
# qemu-img info CentOS_Linux_release_7.8.2003.qcow2
image: CentOS_Linux_release_7.8.2003.qcow2
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 619M
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
# virt-filesystems -a CentOS_Linux_release_7.8.2003.qcow2 --long --parts --blkdevs -h
Name Type MBR Size Parent
/dev/sda1 partition 83 40G /dev/sda
/dev/sda device - 40G -
后续使用这个工具来完成我们对镜像的定制。
# root 密码
#virt-customize -a CentOS_Linux_release_7.8.2003.qcow2 --root-password password:chenshake
# 设置时区
virt-customize -a CentOS_Linux_release_7.8.2003.qcow2 --timezone "Asia/Shanghai"
#安装工具
virt-customize -a CentOS_Linux_release_7.8.2003.qcow2 --install [net-tools,wget,vim,unzip,qemu-guest-agent]
#启动服务
virt-customize -a CentOS_Linux_release_7.8.2003.qcow2 --run-command 'systemctl enable qemu-guest-agent'
#SSH服务
virt-sysprep -a CentOS_Linux_release_7.8.2003.qcow2 --edit '/etc/ssh/sshd_config:s/GSS/#GSS/'
virt-sysprep -a CentOS_Linux_release_7.8.2003.qcow2 --edit '/etc/ssh/sshd_config:s/#UseDNS yes/UseDNS no/'
#查看修改
virt-cat -a CentOS_Linux_release_7.8.2003.qcow2 /etc/ssh/sshd_config
#上传优化脚本和运行
virt-customize -a CentOS_Linux_release_7.8.2003.qcow2 --upload /root/centos.sh:/root/centos.sh
virt-customize -a CentOS_Linux_release_7.8.2003.qcow2 -chmod 755:/root/centos.sh
virt-customize -a CentOS_Linux_release_7.8.2003.qcow2 --run '/root/centos.sh'
安装Zstack的agent
virt-customize -a CentOS_Linux_release_7.8.2003.qcow2 --firstboot-command '/bin/bash -c "$(curl -s -S http://169.254.169.254/vm-tools.sh)"'
脚本,逐步完善,目前已经可以满足我使用
!/bin/bash
#yum seting
cd /etc/yum.repos.d/
mkdir backup
mv *.repo ./backup
curl -O http://mirrors.aliyun.com/repo/Centos-7.repo
curl -O http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
cd -
# only for centos 7.6
#sed -i 's/$releasever/7.6.1810/g' /etc/yum.repos.d/Centos-7.repo
#vim
echo 'alias vi=vim' >> /etc/profile
脚本如果需要指定版本的centos镜像,我们需要考虑在脚本加入一行。
sed -i 's/$releasever/7.6.1810/g' /etc/yum.repos.d/Centos-7.repo
查看修改结果
# virt-ls -a CentOS_Linux_release_7.6.1810.qcow2 /etc/yum.repos.d/
Centos-7.repo
backup
epel-7.repo
启用pyton的http server,简单很多。通过ip地址,就可以访问。
python -m SimpleHTTPServer 8080
千知博客